#pragma once

#include "../umlmodel_global.h"

namespace uml {

/// <summary>
/// CallConcurrencyKind
/// CallConcurrencyKind is an Enumeration used to specify the semantics of
/// concurrent calls to a BehavioralFeature.
/// </summary>
enum class UMLMODEL_EXPORT CallConcurrencyKind {

    /// <summary>
    /// 
    /// No concurrency management mechanism is associated with the BehavioralFeature
    /// and, therefore, concurrency conflicts may occur. Instances that invoke a
    /// BehavioralFeature need to coordinate so that only one invocation to a target on
    /// any BehavioralFeature occurs at once.
    /// </summary>
    ksequential,

    /// <summary>
    /// 
    /// Multiple invocations of a BehavioralFeature that overlap in time may occur to
    /// one instance, but only one is allowed to commence. The others are blocked until
    /// the performance of the currently executing BehavioralFeature is complete. It is
    /// the responsibility of the system designer to ensure that deadlocks do not occur
    /// due to simultaneous blocking.
    /// </summary>
    kguarded,

    /// <summary>
    /// 
    /// Multiple invocations of a BehavioralFeature that overlap in time may occur to
    /// one instance and all of them may proceed concurrently.
    /// </summary>
    kconcurrent,
};

} // namespace uml
